1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.purple.sslconn;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.glist;
34 import derelict.purple.account;
35 import derelict.purple.proxy;
36 import derelict.purple.certificate;
37 
38 extern (C):
39 
40 alias _Anonymous_0 PurpleSslErrorType;
41 alias _PurpleSslConnection PurpleSslConnection;
42 alias void function (void*, _PurpleSslConnection*, ) PurpleSslInputFunction;
43 alias void function (_PurpleSslConnection*, _Anonymous_0, void*) PurpleSslErrorFunction;
44 alias _Anonymous_1 PurpleSslOps;
45 
46 enum _Anonymous_0
47 {
48 	PURPLE_SSL_HANDSHAKE_FAILED = 1,
49 	PURPLE_SSL_CONNECT_FAILED = 2,
50 	PURPLE_SSL_CERTIFICATE_INVALID = 3
51 }
52 
53 struct _PurpleSslConnection
54 {
55 	char* host;
56 	int port;
57 	void* connect_cb_data;
58 	PurpleSslInputFunction connect_cb;
59 	PurpleSslErrorFunction error_cb;
60 	void* recv_cb_data;
61 	PurpleSslInputFunction recv_cb;
62 	int fd;
63 	guint inpa;
64 	PurpleProxyConnectData* connect_data;
65 	void* private_data;
66 	PurpleCertificateVerifier* verifier;
67 }
68 
69 struct _Anonymous_1
70 {
71 	gboolean function () init;
72 	void function () uninit;
73 	void function (PurpleSslConnection*) connectfunc;
74 	void function (PurpleSslConnection*) close;
75 	size_t function (PurpleSslConnection*, void*, size_t) read;
76 	size_t function (PurpleSslConnection*, const(void)*, size_t) write;
77 	GList* function (PurpleSslConnection*) get_peer_certificates;
78 	void function () _purple_reserved2;
79 	void function () _purple_reserved3;
80 	void function () _purple_reserved4;
81 }
82 
83 version(Derelict_Link_Static)
84 {
85     extern( C ) nothrow 
86     {
87 	    gboolean purple_ssl_is_supported();
88         const(gchar)* purple_ssl_strerror(PurpleSslErrorType error);
89         PurpleSslConnection* purple_ssl_connect(PurpleAccount* account, const(char)* host, int port, PurpleSslInputFunction func, PurpleSslErrorFunction error_func, void* data);
90         PurpleSslConnection* purple_ssl_connect_with_ssl_cn(PurpleAccount* account, const(char)* host, int port, PurpleSslInputFunction func, PurpleSslErrorFunction error_func, const(char)* ssl_host, void* data);
91         PurpleSslConnection* purple_ssl_connect_fd(PurpleAccount* account, int fd, PurpleSslInputFunction func, PurpleSslErrorFunction error_func, void* data);
92         PurpleSslConnection* purple_ssl_connect_with_host_fd(PurpleAccount* account, int fd, PurpleSslInputFunction func, PurpleSslErrorFunction error_func, const(char)* host, void* data);
93         void purple_ssl_input_add(PurpleSslConnection* gsc, PurpleSslInputFunction func, void* data);
94         void purple_ssl_close(PurpleSslConnection* gsc);
95         size_t purple_ssl_read(PurpleSslConnection* gsc, void* buffer, size_t len);
96         size_t purple_ssl_write(PurpleSslConnection* gsc, const(void)* buffer, size_t len);
97         GList* purple_ssl_get_peer_certificates(PurpleSslConnection* gsc);
98         void purple_ssl_set_ops(PurpleSslOps* ops);
99         PurpleSslOps* purple_ssl_get_ops();
100         void purple_ssl_init();
101         void purple_ssl_uninit();
102     }
103 }
104 else
105 {
106     extern( C ) nothrow 
107     {
108 	    alias da_purple_ssl_is_supported = gboolean function();																																												
109         alias da_purple_ssl_strerror = const(gchar)* function(PurpleSslErrorType error);																																					
110         alias da_purple_ssl_connect = PurpleSslConnection* function(PurpleAccount* account, const(char)* host, int port, PurpleSslInputFunction func, PurpleSslErrorFunction error_func, void* data);										
111         alias da_purple_ssl_connect_with_ssl_cn = PurpleSslConnection* function(PurpleAccount* account, const(char)* host, int port, PurpleSslInputFunction func, PurpleSslErrorFunction error_func, const(char)* ssl_host, void* data);	
112         alias da_purple_ssl_connect_fd = PurpleSslConnection* function(PurpleAccount* account, int fd, PurpleSslInputFunction func, PurpleSslErrorFunction error_func, void* data);															
113         alias da_purple_ssl_connect_with_host_fd = PurpleSslConnection* function(PurpleAccount* account, int fd, PurpleSslInputFunction func, PurpleSslErrorFunction error_func, const(char)* host, void* data);							
114         alias da_purple_ssl_input_add = void function(PurpleSslConnection* gsc, PurpleSslInputFunction func, void* data);																													
115         alias da_purple_ssl_close = void function(PurpleSslConnection* gsc);																																								
116         alias da_purple_ssl_read = size_t function(PurpleSslConnection* gsc, void* buffer, size_t len);																																		
117         alias da_purple_ssl_write = size_t function(PurpleSslConnection* gsc, const(void)* buffer, size_t len);																																
118         alias da_purple_ssl_get_peer_certificates = GList* function(PurpleSslConnection* gsc);																																				
119         alias da_purple_ssl_set_ops = void function(PurpleSslOps* ops);																																										
120         alias da_purple_ssl_get_ops = PurpleSslOps* function();																																												
121         alias da_purple_ssl_init = void function();																																															
122         alias da_purple_ssl_uninit = void function();
123     }
124 
125     __gshared
126     {
127 	    da_purple_ssl_is_supported purple_ssl_is_supported;
128 	    da_purple_ssl_strerror purple_ssl_strerror;
129 	    da_purple_ssl_connect purple_ssl_connect;
130 	    da_purple_ssl_connect_with_ssl_cn purple_ssl_connect_with_ssl_cn;
131 	    da_purple_ssl_connect_fd purple_ssl_connect_fd;
132 	    da_purple_ssl_connect_with_host_fd purple_ssl_connect_with_host_fd;
133 	    da_purple_ssl_input_add purple_ssl_input_add;
134 	    da_purple_ssl_close purple_ssl_close;
135 	    da_purple_ssl_read purple_ssl_read;
136 	    da_purple_ssl_write purple_ssl_write;
137 	    da_purple_ssl_get_peer_certificates purple_ssl_get_peer_certificates;
138 	    da_purple_ssl_set_ops purple_ssl_set_ops;
139 	    da_purple_ssl_get_ops purple_ssl_get_ops;
140 	    da_purple_ssl_init purple_ssl_init;
141 	    da_purple_ssl_uninit purple_ssl_uninit;
142     }
143 }